package pe.edu.upla.lamerced.service.impl;

import java.util.List;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import pe.edu.upla.lamerced.DAO.HabitacionDAO;
import pe.edu.upla.lamerced.DAO.HospedajeDAO;
import pe.edu.upla.lamerced.bean.Detallefactura;
import pe.edu.upla.lamerced.bean.Factura;
import pe.edu.upla.lamerced.bean.Habitacion;
import pe.edu.upla.lamerced.bean.Hospedaje;
import pe.edu.upla.lamerced.service.HospedajeService;


public class HospedajeServiceImpl implements HospedajeService {
	
	private HospedajeDAO hospedajeDAO;
    private HabitacionDAO habitacionDAO;
   public HospedajeDAO getHospedajeDAO() {
      return hospedajeDAO;
   }
   public void setHospedajeDAO(HospedajeDAO hospedajeDAO) {
      this.hospedajeDAO = hospedajeDAO;
   }
   public HabitacionDAO getHabitacionDAO() {
      return habitacionDAO;
   }
   public void setHabitacionDAO(HabitacionDAO habitacionDAO) {
      this.habitacionDAO = habitacionDAO;
   }

	@Override
	public void registrarHospedaje(Hospedaje hospedaje) {
		getHospedajeDAO().registrarHospedaje(hospedaje);
	}

	@Override
	@Transactional(propagation=Propagation.REQUIRES_NEW)
	public void registrarReserva(Hospedaje hospedaje) {
		getHospedajeDAO().registrarReserva(hospedaje);
		Habitacion hab = getHabitacionDAO().obtenerHabitacion(hospedaje.getHabitacion().getIdhabitacion());
		getHabitacionDAO().modificarHabitacion(hab);
	}

	@Override
	public Hospedaje obtenerReserva(Integer idhospedaje) {
		return getHospedajeDAO().obtenerReserva(idhospedaje);
	}

	@Override
	public List<Hospedaje> listarRserva(Hospedaje hospedaje) {
		return getHospedajeDAO().listarRserva(hospedaje);
	}

	@Override
	public Hospedaje obtenerHospedaje(Integer idhospedaje) {
		return getHospedajeDAO().obtenerHospedaje(idhospedaje);
	}

	@Override
	public void registrarHospedajeReserva(Hospedaje hospedaje) {
		getHospedajeDAO().registrarHospedajeReserva(hospedaje);
	}

	@Override
	@Transactional(propagation=Propagation.REQUIRES_NEW)
	public void finalizarreserva(Hospedaje hospedaje) {
		Hospedaje hos = getHospedajeDAO().obtenerReserva(hospedaje.getIdhospedaje());
		hos.setEstado(0);
		getHospedajeDAO().finalizarreserva(hos);
		Habitacion hab = getHabitacionDAO().obtenerHabitacion(hospedaje.getHabitacion().getIdhabitacion());
		hab.setEstado(2);
		getHabitacionDAO().modificarHabitacion(hab);
	}

	/**
	 * lista de hospedajes. si es historico no debe importar si <br/>
	 * esta activo el hospedajeo y a terminado (estados 2 y 3 )
	 */
	@Override
	public List<Hospedaje> listaHospedajes(String usuario) {
		return getHospedajeDAO().listaHospedajes(usuario);
	}

	@Override
	public List<Habitacion> buscarHabitacionesdisponibles(Hospedaje h) {
		return getHospedajeDAO().buscarHabitacionesdisponibles(h);
	}

	@Override
	public void anularReserva(int codigo) {
		getHospedajeDAO().anularReserva(codigo);
	}

	@Override
	public List<Hospedaje> listaHospedajesActivos() {
		return getHospedajeDAO().listaHospedajesActivos();
	}

	@Override
	@Transactional(propagation=Propagation.REQUIRES_NEW)
	public void registrarFactura(Factura fac, List<Detallefactura> lisDet) {
		getHospedajeDAO().registrarFactura(fac,lisDet);
	}
   @Override
   public Hospedaje obtenerReservaExacta(String fecha,String habitacion) {
      return getHospedajeDAO().obtenerReservaExacta(fecha,habitacion);
   }
   @Override
   public Hospedaje obtenerHospedajeExacto(String fecha,String habitacion) {
      return getHospedajeDAO().obtenerHospedajeExacto(fecha,habitacion);
   }

   public void anularHospedaje(int cod) {
       getHospedajeDAO().anularHospedaje(cod);
   }



}
